home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MacWorld 1999 July
/
Macworld (1999-07).dmg
/
Shareware World
/
Info
/
For Developers
/
Mops 3.4.sea
/
Mops source
/
Module source
/
DialogMod.txt
< prev
next >
Wrap
Text File
|
1997-12-09
|
5KB
|
195 lines
\ Dialog class.
\ July 91 mrh Moved to a module, and migrated some methods from Dialog+.
\ Jan 95 mrh Removed CALLER - can't bind to a word name any more
\ Sept 97 mrh Updated for PowerMops
\ Class Dialog handles modal dialogs. For modeless dialogs, use the
\ subclass Dialog+.
:class DIALOG super{ x-array }
record
{ int RESID \ note: not a Toolbox record here!
ptr DLGPTR
var PROCPTR \ not a ptr, since we want it initialized to zero
int BOLDITEM
}
:m DLGPTR:
inline{ get: dlgPtr} ;m
:m CLOSE:
nil?: dlgPtr ?EXIT
[ PPC? ] [IF]
get: procPtr ?dup IF DisposeRoutineDescriptor THEN
[THEN]
get: dlgPtr DisposeDialog
clear: dlgPtr ;m
:m OPEN?:
nil?: dlgPtr ;m
:m ITEMHANDLE: { item# -- hndl }
get: dlgPtr item#
addr: itemType addr: itemHandle addr: tempRect
GetDialogItem
get: itemHandle ;m
:m DRAWBOLD:
nil?: dlgPtr ?EXIT
get: boldItem ?dup 0EXIT
savePort
get: dlgPtr SetPort 3 3 PenSize
itemHandle: self drop \ Sets up tempRect
-4 -4 inset: tempRect
addr: tempRect 16 16 FrameRoundRect PenNormal
restPort ;m
:m GETNEW:
get: resid 0 -1 GetNewDialog dup put: dlgPtr
0= abort" dlg resource not found"
drawBold: self ;m
:m SETPROC: \ ( xt -- ) set dialog proc
[ PPC? ] [IF]
2+ \ I think this will have to change!
konst uppModalFilterProcInfo konst kPowerPCISA NewRoutineDescriptor
[THEN]
put: procPtr
;m
:m MODAL:
BEGIN
get: procPtr addr: theItem ModalDialog
get: theItem 1- exec: super
rtm false -> rtm
NUNTIL ;m
:m PUTITEM: \ ( val item# -- )
itemHandle: self swap SetControlValue ;m
:m GETITEM: \ ( item# -- val ) Gets value for an item#
itemHandle: self GetControlValue ;m
:m PUTRESID: \ ( resID -- )
inline{ put: resID} ;m
:m INIT: \ ( xt1 ... xtN N resID -- )
put: resID put: super ;m
:m SETBOLD: \ ( item# -- ) Causes bold outline of the specified item
inline{ put: boldItem} ;m
:m GETTEXT: \ ( item# -- addr len ) Returns a text item's text
itemHandle: self buf255 get: ItemType 24 and
IF GetDialogItemText ELSE GetControlTitle THEN
buf255 count ;m
:m PUTTEXT: { addr len item# -- } \ Stores an item's text
item# itemHandle: self
addr len str255 get: ItemType 24 and
IF SetDialogItemText ELSE SetControlTitle THEN ;m
:m SETSELECT: { start end item# -- }
\ Sets the selection range for text item
get: dlgPtr
item# start end SelectDialogItemText ;m
:m DRAW: \ Forces drawing of dialog before going to modal:
get: dlgPtr DrawDialog ;m
\ ====== Extra methods for manipulating dialog items ======
:m HIDEITEM: \ ( item# -- )
get: dlgPtr swap HideDialogItem ;m
:m SHOWITEM: \ ( item# -- )
get: dlgPtr swap ShowDialogItem ;m
:m DISABLEITEM: \ ( item# -- )
itemHandle: self 254 HiliteControl ;m
:m ENABLEITEM: \ ( item# -- )
itemHandle: self 0 HiliteControl ;m
:m SETUSERPROC: { ^proc item# -- }
[ PPC? ] [IF]
^proc konst uppUserItemProcInfo konst kPowerPCISA NewRoutineDescriptor
-> ^proc \ ***note, we haven't arranged to dispose it yet!
[THEN]
item# itemHandle: self drop
get: dlgPtr item# 0 ^proc addr: tempRect
SetDialogItem
;m
:m HITBOLD:
get: boldItem dup NIF drop EXIT THEN
1- exec: self ;m
:m KEY: \ ( -- b )
\ Called when a key down event occurs with this dialog's
\ window active. Returns false if we've handled the key
\ here, so no further action is required. Subclasses can
\ have customized KEY: methods; here we just provide a
\ hopefully sensible default action - namely, we treat a
\ Return or Enter as a click on the bold item, and ignore
\ all other keys.
msg: fEvent $ FF and ( char typed )
dup 3 = swap RET = or
IF \ Return or Enter typed - treat as click on bold item
hitBold: self false EXIT
THEN
true ;m
:m TITLE: \ ( addr len -- )
str255
get: dlgPtr swap SetWTitle ;m
:m MAXX: \ ( -- x )
get: dlgPtr maxX: class_as> window ;m
:m MAXY:
get: dlgPtr maxY: class_as> window ;m
:m MOVE: \ ( x y -- )
get: dlgPtr move: class_as> window ;m
:m CENTER:
get: dlgPtr center: class_as> window ;m
\ =================
:m SHOW:
get: dlgPtr ShowWindow ;m
:m HIDE:
get: dlgPtr HideWindow ;m
:m SELECT:
get: dlgPtr SelectWindow ;m
:m CLASSINIT: \ Initializes default handlers to close the dialog box.
['] closer fill: self ;m
;class
: TOGITEM \ Toggles the check box or radio button
get: theItem 1 over ^base getitem: [] - swap ^base putitem: []
returnToModal ;
: PARAMTEXT ( addr0 len0 addr1 len1 addr2 len2 addr3 len3 ) { \ p1 p2 p3 -- }
\ Substitutes Dialog text.
str255 dup -> p3 count +
>str255 dup -> p2 count +
>str255 dup -> p1 count +
>str255 p1 p2 p3 ZaramText ;